Kurs Java (10)
Spis tematów
1. Język Java
1.1. Elementarny program: tekst źródłowy, kompilacja, interpretacja
1.2. Klasy: definicja, dziedziczenie, tworzenie obiektów
1.3. Interfejsy
1.4. Pliki źródłowe i pakiety
1.5. Polimorfizm
1.6. Obsługa wyjątków
1.7. Zarządzanie pamięcią
1.8. Współbieżność
1.8.1 Synchronizacja wątków
1.9. Obiekty sieciowe
2. Aplety - programy Javy na stronach WWW
3. Standardowe klasy Javy
4. Servlety - programy Javy na serwerze WWW
5. Podsumowanie
6. Programy - ćwiczenia
/czcionką pogrubioną zaznaczono tematy zawarte w tej części/
4. Servlety - programy Javy na serwerze WWW
Servlety są modułami, które są uruchamiane wewnątrz serwerów przetwarzających
zapytania i generujących odpowiedzi, takich jak np. rozszerzone o obsługę Javy
serwery WWW. Rozszerzają one funkcjonalność tych serwerów. Można w uproszczeniu
powiedzieć, że servlety dla serwerów są tym, czym aplety dla przeglądarek.
Servlety stanowią alternatywę dla skryptów CGI, umożliwiając łatwą metodę
dynamicznego tworzenia dokumentów HTML. Są one łatwiejsze do pisania dzięki
wykorzystaniu środowiska Javy. Są również szybciej wykonywane, gdyż wywołanie
servletu odbywa się nie poprzez uruchomienie nowego procesu, co jest kosztowne
ze względu na czas procesora i zasoby pamięciowe, lecz jako wątek. Co więcej,
kod wykonywalny dla servletu jest ładowany do serwera tylko raz, gdy po raz
pierwszy żądana jest usługa oferowana przez dany servlet lub automatycznie, gdy
zostanie zmieniony kod servleta. Potem servlet pozostaje w pamięci serwera i
może równolegle obsługiwać wiele zapytań z możliwością komunikacji pomiędzy
nimi.
Klasy implementujące funkcje servletów znajdują się w pakiecie javax.servlet
dostępnego z firmy Sun jako Java Servlet Development Kit. Zawierają one
abstrakcyjną klasę GenericServlet oraz interfejs Servlet, które definiują
podstawowe własności ogólnych servletów, czyli modułów przetwarzających
zapytania i generujących odpowiedzi. Jednak najczęściej korzysta się z podklas
znajdujących się w pakiecie javax.servlet.http definiujących servlety HTTP.
Klasa HttpServlet posiada m.in. takie metody jak doGet i doPost obsługujące
typowe zapytania CGI, czy uniwersalną metodę service obsługującą wszystkie
rodzaje zapytań. Najprostszy servlet może wyglądać następująco:
HelloWorldServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorldServlet extends HttpServlet {
public void doGet (HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
ServletOutputStream out = res.getOutputStream();
out.println("<html>");
out.println("<head><title>Hello World</title></head>");
out.println("<body>");
out.println("<h1>Hello World</h1>");
out.println("</body></html>");
}
}
Większość użytecznych servletów czyta parametry wejściowe przekazane im z
przeglądarki poprzez metody GET lub POST i na ich podstawie tworzy odpowiedni
dokument HTML. Prosty przykład takiego servletu przedstawiono poniżej.
Hello.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Hello extends HttpServlet {
public void service(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter toClient = res.getWriter();
toClient.println("<html><head>");
toClient.println("<title>Hello</title>");
toClient.println("</head>");
toClient.println("<h1>Hello " +
req.getParameterValues("name")[0] + "!</h1>");
toClient.println("</body></html>");
toClient.close();
}
}
Powyższy servlet można wywołać na kilka sposobów. Można podać w przeglądarce
URL
http://www.task.gda.pl/servlet/Hello?name=Darek
i wywołać servlet przekazując parametry metodą GET. Można na stronie HTML
umieścić formularz:
<form action=http://www.task.gda.pl/servlet/Hello method=POST>
Podaj swoje imię: <input type=text name=name>
<input type=submit value=Wyślij>
</form>
i wywołać servlet przekazując parametry metodą POST. Można również
wykorzystać tag <servlet> na stronie HTML zapisanej w pliku z rozszerzeniem
shtml.
Hello.shtml
...
<servlet code=Hello>
<param name=name value=Darek>
</servlet>
...
Wtedy serwer WWW rozszerzony o funkcjonalność servletów zastąpi na stronie
HTML powyższy tag wynikiem generowanym przez servlet Hello i tak przetworzoną
stronę prześle do przeglądarki.
Dostępnych jest już wiele serwerów WWW obsługujących servlety Javy. Przykładami
mogą być Java Web Server firmy Sun lub darmowy dla celów niekomercyjnych JRun
firmy Live Software. Ten ostatni może pracować jako samodzielny serwer WWW, bądź
jako moduł rozszerzający funkcjonalność innych znanych serwerów WWW np. Apache,
Microsoft IIS, Netscape.
5. Podsumowanie
Zalety języka Java:
- "ożywienie" WWW - swego rodzaju "lingua franca" Internetu
- język pozwala łatwo pisać aplikacje sieciowe
- przenośność - niezależność od platformy dzięki JVM; Java poprzez swój
B-kod staje się najbliższą aproksymacją (zbudowaną raczej z software niż z
hardware, chociaż anonsowane są już "Java chips") jednego z najstarszych
marzeń przemysłu komputerowego: prawdziwie uniwersalna maszyna wirtualna
- prawie czysta implementacja paradygmatu obiektowego
- usunięcie arbitralnego pojęcia wskaźnika jak w C++
- wsparcie dla zbierania nieużytków
- brak samodzielnych (tj. definiowanych poza klasami) funkcji zewnętrznych
- weryfikacja kodu w fazie kompilacji i w fazie wykonania na zgodność ze
standardem języka
- dynamiczne ładowanie klas (w locie)
- biblioteki klas dla GUI, sieciowe i WWW
Wady:
- Brak definiowanych przez użytkownika przeciążonych operatorów
- złamanie zasad obiektowości w standardowych bibliotekach klas: w klasach
opakowań (kopertowych), w klasach kolekcji i w klasach łańcuchów
- Komunikaty są rzadko polimorficzne i rzadko trafiają na oczekiwaną
strukturę dziedziczenia
- brak klas parametryzowanych (genericity, templates)
- dziedziczenie tylko pojedyncze
- usunięcie instrukcji assert znanej w C i C++
- pogmatwana (zawikłana) struktura modularna z trzema wpływającymi wzajemnie
na siebie (interagującymi) koncepcjami (klasy, pakiety zagnieżdżone, pliki
źródłowe)
Bibliografia
[1] Cargill T. An Overview of Java for C++ Programmers. C++ Report, vo. 8,
No. 2, pp. 46-49, 1996.
[2] Lorenz M. Java as an Object-Oriented Language. SIGS Books & Multimedia, New
York 1996.
[3] Martin R. C++ and Java: A Critical Comparison. C++ Report, vo. 9, No. 1, pp.
42-49, 1997.
[4] Jain P. and Schmidt D.C. Experiences Converting a C++ Communication Software
Framework to Java. C++ Report, vo. 9, No. 1, pp. 51-66, 1997.
[5] Gosling J., Joy B, Steele G. The Java Language Specification. Addison-Wesley,
1996, http://java.sun.com/docs/books/jls/.
[6] The Java Tutorial. http://java.sun.com/docs/books/tutorial/, 1998.
[7] JDK1.1.6 Documentation. http://java.sun.com/products/jdk/1.1/docs/, 1998.
[8] Servlet Tutorial. http://www.task.gda.pl/java/ServletTutorial.html, 1998.
Kurs pochodzi ze strony:
Java Kurs
Dla magazynu @t opracował:
Dariusz Frankowski
|